/**
 * 系统控制模块
 * 负责处理系统级操作，如关机、重启、休眠等
 */

const { exec } = require('child_process');
const { ipcMain } = require('electron');
const { handleError, ErrorTypes } = require('../common/error-handler');
const { SystemControlChannels } = require('../common/ipc-channels');

/**
 * 初始化系统控制模块
 */
function initialize() {
    console.log('初始化系统控制模块...');
    
    // 设置IPC监听器
    setupIpcListeners();
    
    console.log('系统控制模块初始化完成');
}

/**
 * 设置IPC监听器
 */
function setupIpcListeners() {
    // 关机命令
    ipcMain.on(SystemControlChannels.SHUTDOWN, () => {
        executeSystemCommand('shutdown', ['-s', '-t', '0']);
    });
    
    // 重启命令
    ipcMain.on(SystemControlChannels.RESTART, () => {
        executeSystemCommand('shutdown', ['-r', '-t', '0']);
    });
    
    // 休眠命令
    ipcMain.on(SystemControlChannels.SLEEP, () => {
        executeSystemCommand('rundll32.exe', ['powrprof.dll,SetSuspendState', '0,1,0']);
    });
}

/**
 * 执行系统命令
 * @param {string} command - 要执行的命令
 * @param {string[]} args - 命令参数
 */
function executeSystemCommand(command, args) {
    try {
        const cmd = process.platform === 'win32' ? 
            `${command} ${args.join(' ')}` : 
            `${command} ${args.join(' ')}`;
            
        exec(cmd, (error) => {
            if (error) {
                handleError('执行系统命令失败', ErrorTypes.SYSTEM, { 
                    error, 
                    command, 
                    args 
                });
            }
        });
    } catch (error) {
        handleError('执行系统命令失败', ErrorTypes.SYSTEM, { 
            error, 
            command, 
            args 
        });
    }
}

// 导出模块
module.exports = {
    initialize
}; 